﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SIAKADCORE.Helpers;
using SIAKADCORE.Models;
using System.Data;

namespace SIAKADCORE.Controllers
{
    /// <summary>
    /// Kelas PertanyaanController
    /// </summary>
    public static class PertanyaanController
    {
        /// <summary>
        /// Method untuk menambahkan entri pertanyaan.
        /// </summary>
        /// <param name="pertanyaan">Pertanyaan pertanyaan.</param>
        /// <returns>True ketika sukses menambahkan entri dan sebaliknya.</returns>
        public static bool Tambah(Pertanyaan pertanyaan)
        {
            string queryString = string.Format("INSERT INTO {0} ({1} ,{2} ,{3} ,{4} ,{5} ,{6}, {7}, {8}, {9}, {10}) VALUES ('{11}' ,'{12}' ,'{13}' ,'{14}' ,'{15}' ,'{16}','{17}','{18}','{19}','{20}')",
                Pertanyaan.TableName,
                Pertanyaan.ColumnNameIdPertanyaan,
                Pertanyaan.ColumnNamePertanyaan,
                Pertanyaan.ColumnNamePilihanJawaban1,
                Pertanyaan.ColumnNamePilihanJawaban2,
                Pertanyaan.ColumnNamePilihanJawaban3,
                Pertanyaan.ColumnNamePilihanJawaban4,
                Pertanyaan.ColumnNameBobotPillihanJawaban1,
                Pertanyaan.ColumnNameBobotPillihanJawaban2,
                Pertanyaan.ColumnNameBobotPillihanJawaban3,
                Pertanyaan.ColumnNameBobotPillihanJawaban4,
                pertanyaan.IdPertanyaan,
                pertanyaan.IsiPertanyaan,
                pertanyaan.PilihanJawaban1,
                pertanyaan.PilihanJawaban2,
                pertanyaan.PilihanJawaban3,
                pertanyaan.PilihanJawaban4,
                pertanyaan.BobotPillihanJawaban1,
                pertanyaan.BobotPillihanJawaban2,
                pertanyaan.BobotPillihanJawaban3,
                pertanyaan.BobotPillihanJawaban4);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }

        /// <summary>
        /// Method untuk menghapus entri pertanyaan.
        /// </summary>
        /// <param name="idPertanyaan">Id pertanyaan yang akan diubah.</param>
        /// <param name="pertanyaan">Pertanyaan pertanyaan.</param>
        /// <returns>True ketika sukses mengubah entri dan sebaliknya.</returns>
        public static bool Ubah(string idPertanyaan, Pertanyaan pertanyaan)
        {
            string queryString = string.Format("UPDATE {0} SET {1} = '{2}' ,{3} = '{4}' ,{5} = '{6}' ,{7} = '{8}' ,{9} = '{10}' ,{11} = '{12}', {13} = '{14}', {15} = '{16}', {17} = '{18}', {19} = '{20}' WHERE {1} = '{21}'",
                Pertanyaan.TableName,
                Pertanyaan.ColumnNameIdPertanyaan, pertanyaan.IdPertanyaan, Pertanyaan.ColumnNamePertanyaan, pertanyaan.IsiPertanyaan, Pertanyaan.ColumnNamePilihanJawaban1, pertanyaan.PilihanJawaban1, Pertanyaan.ColumnNamePilihanJawaban2, pertanyaan.PilihanJawaban2, Pertanyaan.ColumnNamePilihanJawaban3, pertanyaan.PilihanJawaban3, Pertanyaan.ColumnNamePilihanJawaban4, pertanyaan.PilihanJawaban4, Pertanyaan.ColumnNameBobotPillihanJawaban1, pertanyaan.BobotPillihanJawaban1, Pertanyaan.ColumnNameBobotPillihanJawaban2, pertanyaan.BobotPillihanJawaban2, Pertanyaan.ColumnNameBobotPillihanJawaban3, pertanyaan.BobotPillihanJawaban3, Pertanyaan.ColumnNameBobotPillihanJawaban4, pertanyaan.BobotPillihanJawaban4, idPertanyaan);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }

        /// <summary>
        /// Method untuk menghapus entri pertanyaan.
        /// </summary>
        /// <param name="idPertanyaan">Id pertanyaan yang akan dihapus.</param>
        /// <returns>True ketika sukses menghapus entri dan sebaliknya.</returns>
        public static bool Hapus(string idPertanyaan)
        {
            string queryString = string.Format("DELETE FROM {0} WHERE {1} = '{2}'",
                Pertanyaan.TableName, Pertanyaan.ColumnNameIdPertanyaan, idPertanyaan);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }

        /// <summary>
        /// Method untuk mendapatkan hasil query dari tabel pertanyaan.
        /// </summary>
        /// <param name="dataset">Dataset keluaran yang berisi hasil query.</param>
        /// <returns>True ketika sukses meng-query dan sebaliknya.</returns>
        public static bool GetTabel(out DataSet dataset)
        {
            string queryString = string.Format("SELECT {0} ,{1} ,{2} ,{3} ,{4} ,{5} ,{6} , {7} ,{8} ,{9} FROM {10}",
                Pertanyaan.ColumnNameIdPertanyaan, Pertanyaan.ColumnNamePertanyaan,
                Pertanyaan.ColumnNamePilihanJawaban1, Pertanyaan.ColumnNamePilihanJawaban2,
                Pertanyaan.ColumnNamePilihanJawaban3, Pertanyaan.ColumnNamePilihanJawaban4,
                Pertanyaan.ColumnNameBobotPillihanJawaban1,
                Pertanyaan.ColumnNameBobotPillihanJawaban2,
                Pertanyaan.ColumnNameBobotPillihanJawaban3,
                Pertanyaan.ColumnNameBobotPillihanJawaban4,
                Pertanyaan.TableName);
            return SQLHelper.Instance.ExecuteReader(queryString, out dataset);
        }

        /// <summary>
        /// Method untuk mendapatkan hasil query dari tabel pertanyaan.
        /// </summary>
        /// <param name="dataset">Dataset keluaran yang berisi hasil query.</param>
        /// <param name="customQueryString">Kustomisasi query.</param>
        /// <returns>True ketika sukses meng-query dan sebaliknya.</returns>
        public static bool GetTabel(out DataSet dataset, string customQueryString)
        {
            return SQLHelper.Instance.ExecuteReader(customQueryString, out dataset);
        }

        /// <summary>
        /// Method untuk mendapatkan id pertanyaan. Digunakan pada saat memasukkan entri baru.
        /// </summary>
        /// <returns>string kosong ketika terjadi error atau id pertanyaan baru.</returns>
        public static string GetID()
        {
            var dataset = new DataSet();
            bool isQueryAccomplished = GetTabel(out dataset);
            if (!isQueryAccomplished) return string.Empty;

            return SQLHelper.Instance.GetID(Pertanyaan.IdPrefix, Pertanyaan.IdLength, ref dataset);
        }
    }
}
